/*
* @Author: liqs
* @Date:   2020/12/10 21:46
 */
package base

import (
	"errors"
	"fmt"
)

// 闭包
// 注意   AddUper 是一个函数
// 闭包的说明  这个匿名函数和n 形成了一个整体
//            闭包是一个类  函数是操作  n 是字段  函数和n构成闭包
// 当反复调用时   n 是初始化一次  因此 每调用一次就累计一次
// 闭包的关键是  分析出返回的函数引用到的哪些变量
func AddUpper() func(int) int {
	// n 第一次初始化（后续不在初始化，当做函数使用即可）  后续每调用一次就对n 加一次数 返回 n + x
	var n int = 10
	return func(x int) int {
		fmt.Println("n = ", n)
		n = n + x
		return n
	}
}

// 错误处理   defer recover 联合处理
func DealError() {
	// 错误处理   defer recover 联合处理
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("err = ", err)
		}
	}()

	num1 := 10
	num2 := 0
	res := num1 / num2
	fmt.Println("res = ", res)
}

// 自定义错误类型
func Readconfig(name string) (err error) {
	if name == "config" {
		return nil
	} else {
		return errors.New("输入文件名错误")
	}
}
